<?php
/**
 * Created by PhpStorm.
 * User: liyu
 * Date: 2018/4/17
 * Time: 下午4:05
 */

namespace app\api\service;


use EasyWeChat\Factory;

class WeChatService
{
    protected $config = [];

    protected $app = null;

    public function __construct($config=[])
    {
        $this->config = array_merge(config('wxchat'),$config);

        $this->app = Factory::officialAccount($this->config);
    }

    public function serviceValidate()
    {
        $this->app->server->push(function ($message) {
            /*$message['ToUserName']    接收方帐号（该公众号 ID）
            $message['FromUserName']  发送方帐号（OpenID, 代表用户的唯一标识）
            $message['CreateTime']    消息创建时间（时间戳）
            $message['MsgId']         消息 ID（64位整型）*/
            switch ($message['MsgType']) {
                case 'event':
                    /*- MsgType     event
                    - Event       事件类型 （如：subscribe(订阅)、unsubscribe(取消订阅) ...， CLICK 等）

                    # 扫描带参数二维码事件
                    - EventKey    事件KEY值，比如：qrscene_123123，qrscene_为前缀，后面为二维码的参数值
                    - Ticket      二维码的 ticket，可用来换取二维码图片

                    # 上报地理位置事件
                    - Latitude    23.137466   地理位置纬度
                    - Longitude   113.352425  地理位置经度
                    - Precision   119.385040  地理位置精度

                    # 自定义菜单事件
                    - EventKey    事件KEY值，与自定义菜单接口中KEY值对应，如：CUSTOM_KEY_001, www.qq.com*/
                    return '收到事件消息';
                    break;
                case 'text':
                    /*- MsgType  text
                    - Content  文本消息内容*/
                    return '收到文字消息';
                    break;
                case 'image':
                    /*- MsgType  image
                    - MediaId        图片消息媒体id，可以调用多媒体文件下载接口拉取数据。
                    - PicUrl   图片链接*/
                    return '收到图片消息';
                    break;
                case 'voice':
                    /*- MsgType        voice
                    - MediaId        语音消息媒体id，可以调用多媒体文件下载接口拉取数据。
                    - Format         语音格式，如 amr，speex 等
                    - Recognition * 开通语音识别后才有

                    > 请注意，开通语音识别后，用户每次发送语音给公众号时，微信会在推送的语音消息XML数据包中，增加一个 `Recongnition` 字段*/
                    return '收到语音消息';
                    break;
                case 'video':
                    /*- MsgType       video
                    - MediaId       视频消息媒体id，可以调用多媒体文件下载接口拉取数据。
                    - ThumbMediaId  视频消息缩略图的媒体id，可以调用多媒体文件下载接口拉取数据。*/
                    return '收到视频消息';
                    break;
                case 'location':
                    /*$message->MsgType     location
                    $message->Location_X  地理位置纬度
                    $message->Location_Y  地理位置经度
                    $message->Scale       地图缩放大小
                    $message->Label       地理位置信息*/
                    return '收到坐标消息';
                    break;
                case 'link':
                    /*$message->MsgType      link
                    $message->Title        消息标题
                    $message->Description  消息描述
                    $message->Url          消息链接*/
                    return '收到链接消息';
                    break;
                case 'file':
                    /*$message->MsgType      file
                    $message->Title        文件名
                    $message->Description 文件描述，可能为null
                    $message->FileKey      文件KEY
                    $message->FileMd5      文件MD5值
                    $message->FileTotalLen 文件大小，单位字节*/
                    return '收到文件消息';
                // ... 其它消息
                default:
                    return '收到其它消息';
                    break;
            }
        });

        $response = $this->app->server->serve();

        // 将响应输出
        $response->send(); // Laravel 里请使用：return $response;
    }

    //清理接口调用次数
    public function clearQuota()
    {
        $this->app->base->clearQuota();
    }

    public function getValidIps()
    {
        $this->app->base->getValidIps();
    }

    public function broadcasting()
    {
        $result = $this->app->broadcasting->sendText("大家好！约吗？哈哈哈哈");
        var_dump($result);
    }

    public function getAccessToken()
    {
        // 获取 access token 实例
        $accessToken = $this->app->access_token;
        $token = $accessToken->getToken(); // token 数组  token['access_token'] 字符串
        $token = $accessToken->getToken(true); // 强制重新从微信服务器获取 token.
    }
}